/**
 * 日期时间格式化工具
 */

/**
 * 格式化时间为相对时间（刚刚、几分钟前等）
 * @param time 时间字符串或Date对象
 * @returns 格式化后的相对时间
 */
export function formatRelativeTime(time: string | Date): string {
  const date = typeof time === 'string' ? new Date(time) : time
  const now = new Date()
  const diff = now.getTime() - date.getTime()
  
  if (diff < 60000) return '刚刚'
  if (diff < 3600000) return `${Math.floor(diff / 60000)}分钟前`
  if (diff < 86400000) return `${Math.floor(diff / 3600000)}小时前`
  if (diff < 172800000) return '昨天'
  if (diff < 604800000) return `${Math.floor(diff / 86400000)}天前`
  
  return formatDate(date)
}

/**
 * 格式化日期（年-月-日）
 * @param time 时间字符串或Date对象
 * @returns 格式化后的日期
 */
export function formatDate(time: string | Date): string {
  const date = typeof time === 'string' ? new Date(time) : time
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  return `${year}-${month}-${day}`
}

/**
 * 格式化时间（时:分）
 * @param time 时间字符串或Date对象
 * @returns 格式化后的时间
 */
export function formatTime(time: string | Date): string {
  const date = typeof time === 'string' ? new Date(time) : time
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  return `${hours}:${minutes}`
}

/**
 * 格式化日期时间（年-月-日 时:分:秒）
 * @param time 时间字符串或Date对象
 * @returns 格式化后的日期时间
 */
export function formatDateTime(time: string | Date): string {
  const date = typeof time === 'string' ? new Date(time) : time
  const dateStr = formatDate(date)
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')
  return `${dateStr} ${hours}:${minutes}:${seconds}`
}

/**
 * 格式化消息时间
 * - 今天：显示时:分
 * - 昨天：显示"昨天 时:分"
 * - 更早：显示月-日 时:分
 * @param time 时间字符串或Date对象
 * @returns 格式化后的消息时间
 */
export function formatMessageTime(time: string | Date): string {
  const date = typeof time === 'string' ? new Date(time) : time
  const now = new Date()
  const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())
  const yesterday = new Date(today.getTime() - 86400000)
  const messageDate = new Date(date.getFullYear(), date.getMonth(), date.getDate())
  
  const timeStr = formatTime(date)
  
  if (messageDate.getTime() === today.getTime()) {
    return timeStr
  } else if (messageDate.getTime() === yesterday.getTime()) {
    return `昨天 ${timeStr}`
  } else {
    const month = String(date.getMonth() + 1).padStart(2, '0')
    const day = String(date.getDate()).padStart(2, '0')
    return `${month}-${day} ${timeStr}`
  }
}

/**
 * 判断是否是今天
 * @param time 时间字符串或Date对象
 * @returns 是否是今天
 */
export function isToday(time: string | Date): boolean {
  const date = typeof time === 'string' ? new Date(time) : time
  const now = new Date()
  return date.toDateString() === now.toDateString()
}

/**
 * 判断两个时间是否在同一天
 * @param time1 时间1
 * @param time2 时间2
 * @returns 是否在同一天
 */
export function isSameDay(time1: string | Date, time2: string | Date): boolean {
  const date1 = typeof time1 === 'string' ? new Date(time1) : time1
  const date2 = typeof time2 === 'string' ? new Date(time2) : time2
  return date1.toDateString() === date2.toDateString()
}

